package com.haust.config;

import com.haust.dao.RedisDao;
import com.haust.dao.impl.RedisDaoImpl;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * 定义抽象的夫类型
 * 提供通用的对象创建规则
 * 不使用任何注解修饰类型和方法
 */
public abstract class HaustAbstractRedisConfiguration {
    /**
     * 提供的模板对象创建方法
     * 共性创建，如果有 特性，可以自定义
     *
     * @param factory
     * @return
     */

    protected RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

        redisTemplate.setConnectionFactory(factory);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        return redisTemplate;
    }

    protected RedisDao redisDao(RedisTemplate<String,Object> redisTemplate) {
        RedisDaoImpl redisDao = new RedisDaoImpl();
        redisDao.setRedisTemplate(redisTemplate);

        return redisDao;
    }
}
